package empleados.clases.entidades;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.ResultSet;

import javax.sql.rowset.CachedRowSet;

import com.sun.rowset.CachedRowSetImpl;

public class BaseDatos{

    private String controlador;
    private String servidor;
    private String usuario;
    private String contrasena;

    public BaseDatos(String controlador, String servidor, String usuario, String contrasena){

        this.controlador = controlador;
        this.servidor = servidor;
        this.usuario = usuario;
        this.contrasena = contrasena;

    }

    public BaseDatos(){

        this.controlador = "com.mysql.jdbc.controlador";
        this.servidor = "jdbc:mysql://127.0.0.1:3306/terafit";
        this.usuario = "root";
        this.contrasena = "";

    }

    public ResultSet obtenerDatos(String query){
        Connection coneccion = null;
        Statement s = null;
        ResultSet rs = null;
        CachedRowSet crs = null;
        try{
            Class.forName(controlador).newInstance();
            coneccion = DriverManager.getConnection(this.servidor, usuario, contrasena);
            s = coneccion.createStatement();
            rs = s.executeQuery(query);
            crs = new CachedRowSetImpl();
            crs.populate(rs);
        }catch(com.mysql.jdbc.CommunicationsException e){
            System.out.println("Error comunicandose a la base de datos " + this.servidor);
        }catch (Exception e){
            e.printStackTrace();
        }finally{
            assert coneccion != null : "Base de datos no conectada.";
            assert s != null : "Estatuto incorrecto.";
            assert rs != null : "Set de resultados incorrecto.";
            assert crs != null : "Set de resultados guardados incorrecto.";
            if(coneccion != null) this.cerrarBaseDatos(coneccion);
		}
        return crs;
    }

    public int ejecutarQuery(String query){
        Connection coneccion = null;
        Statement s = null;
        int resultado = 0;
        try{
            Class.forName(controlador).newInstance();
            coneccion = DriverManager.getConnection(this.servidor, usuario, contrasena);
            s = coneccion.createStatement();
            resultado = s.executeUpdate(query);
        }catch(com.mysql.jdbc.CommunicationsException e){
            System.out.println("Error comunicandose a la base de datos " + this.servidor);
        }catch (Exception e){
            e.printStackTrace();
        }finally{
            assert coneccion != null : "Base de datos no conectada.";
            assert s != null : "Estatuto incorrecto.";
            if(coneccion != null) this.cerrarBaseDatos(coneccion);
            return resultado;
		}
    }

    public void cerrarBaseDatos(Connection coneccion){
        try{
            coneccion.close();
        }catch (Exception e){
            e.printStackTrace();
        }
    }

}